package com.strive.user.service;

import com.strive.common.model.dto.SysMenu;
import com.strive.common.model.dto.SysPower;
import com.strive.common.model.po.SysPowerCodesPo;
import com.strive.common.service.ISuperService;

import java.util.List;
import java.util.Set;

/**
 * @description:
 * @author: bingcun.chen
 * @Date: 2022/2/23 13:35
 * @Version 1.0
 */
public interface ISysMenuService extends ISuperService<SysMenu> {
    /**
     * 查询所有菜单
     */
    List<SysMenu> findAll();

    /**
     * 查询所有一级菜单
     */
    List<SysMenu> findOnes();

    /**
     * 角色分配菜单
     * @param roleId
     * @param menuIds
     */
    void setMenuToRole(Long roleId, Set<Long> menuIds);

    /**
     * 角色菜单列表
     * @param roleIds 角色ids
     * @return
     */
    List<SysMenu> findByRoles(Set<Long> roleIds);

    /**
     * 角色菜单列表
     * @param roleIds 角色ids
     * @param roleIds 是否菜单
     * @return
     */
    List<SysMenu> findByRoles(Set<Long> roleIds, Integer type);

    /**
     * 角色菜单列表
     * @param roleCodes
     * @return
     */
    List<SysMenu> findByRoleCodes(Set<String> roleCodes, Integer type);

    /**
     * 根据code查询权限和菜单
     * @param roleCodes
     * @return
     */
    List<SysMenu> findMyMenuAndPowers(Set<String> roleCodes);

    /**
     * 通过角色Code查询权限
     * @param roleSet
     * @return
     */
    List<SysPower> findPowersByRoles(Set<String> roleSet);

    /**
     * 构建菜单
     * @param menusList
     * @param sysPowers
     */
    void buildPowers(List<SysMenu> menusList, List<SysPower> sysPowers);

    /**
     * 删除菜单
     * @param id
     */
    void deleteMenusPowers(Long id);
}
